// 通过 mutation 间接更新 state 的多个方法的对象
// 引入 mutation-types 和 api 接口函数
import {
    RECEIVE_GOODSLIST,
    RECEIVE_PRODUCTDATA,
    RECEIVE_PRODUCTCATEGORY,
    INCREMENT_FOOD_COUNT,
    DECREMENT_FOOD_COUNT,
    CLEAR_CART
}
from './mutation-types'

import {
    reqGoodsList,
    reqProductAll,
    reqProductCategory
} from '../api'


//定义异步 action
export default {
    // 异步获取商品列表(mock数据)
    async getGoodsList({
        commit,
        state
    }, callback) {
        // 发送异步 ajax 请求
        const result = await reqGoodsList();
        // 提交一个 mutation
        if (result.code === 200) {
            const goodsList = result.data;
            commit(RECEIVE_GOODSLIST, {
                goodsList
            })
        }
        callback && callback()
    },

    // 异步获取所有商品
    async getProductData({
        commit,
        state
    }, callback) {
        // 发送异步 ajax 请求
        const {
            pageNum,
            pageSize
        } = state
        const result = await reqProductAll(pageNum, pageSize);
        // 提交一个 mutation
        if (result.code === 200) {
            const ProductData = result.data;
            commit(RECEIVE_PRODUCTDATA, {
                ProductData
            })
        }
        callback && callback()
    },

    // 异步获取商品分类
    async getProductCategory({
        commit,
        state
    }, callback) {
        // 发送异步 ajax 请求
        const result = await reqProductCategory();
        // 提交一个 mutation
        if (result.code === 200) {
            const ProductCategory = result.data;
            commit(RECEIVE_PRODUCTCATEGORY, {
                ProductCategory
            })
        }
        callback && callback()
    },

    // 同步更新 food 中的 count 值
    updateFoodCount({
        commit
    }, {
        isAdd,
        food
    }) {
        if (isAdd) {
            commit(INCREMENT_FOOD_COUNT, {
                food
            })
        } else {
            commit(DECREMENT_FOOD_COUNT, {
                food
            })
        }
    },

    // 同步清空购物车
    clearCart({
        commit
    }) {
        commit(CLEAR_CART)
    }



    // 请求所有商品数据并替换 state 中的值
    // getProductData(context) {
    //     axios.get("/api/shop/getShopAll", {
    //             params: {
    //                 pageNum: 1,
    //                 pageSize: 100
    //             }
    //         })
    //         .then(res => {
    //             context.commit("setProduct", res.data.data.list);
    //         });
    // },

}